iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Modern Web

傳承D的意志~ 邁向Django的偉大航道系列 第 5

[Day 05] 參見Django的三大將之一: Model - Migration篇

  • 分享至 

  • xImage
  •  

嗨大家好,我是Sean!
今天來讓我們接續昨天的三大將之一: model! 說到model就不得不提,Migration!
我認為在初期學習django框架能夠釐清MIgration的功能以及作用,對以後能夠少碰到一點error,是非常有幫助的!
所以特別獨立出一篇,獻給我們的Migration!

https://ithelp.ithome.com.tw/upload/images/20220920/20151096JgB0Whhmj8.jpg

甚麼是Migration?

話說回來,Migration這麼重要,那甚麼是Migration呢?

直譯來說,就是資料遷移。在django的model中,利用ORM的技術,將table換作class,而欄位化作其中的屬性,使的我們可以ORM的方式,透過物件來操作、選取、變更資料。

而Migration 就是以上述的概念為基礎,來將class、attribute(屬性)遷移,在資料庫當中建立相對應class的表以及attribute的欄位。

我要遷移囉Migration

回到我們的專案,昨天我們所建立model.py,尚未執行migration的指令。但在此之前,我們必須先將我們app註冊在settings.py之中。

打開我們的專案,可以看到settings.py在專案的資料夾中。
找到INSTALLED_APPS = []的部分,將我們的app: ironman加入在最下面。
https://ithelp.ithome.com.tw/upload/images/20220920/20151096hy1NHZwV28.png

加入完以後別忘記,按下Ctrl+S儲存settings.py,並且開啟虛擬環境。

makemigrations

接下來一樣cd進入專案資料夾後,輸入指令來生成migration的遷移腳本。

python manage.py makemigrations

輸入完成後,可以看到cmd當中出現了提示,生成了0001_initial.py的檔案,而他主要做的事就寫在下方,create model People,也就是建立我們昨天在models.py裡寫的class People,以及它所屬的欄位。

https://ithelp.ithome.com.tw/upload/images/20220920/20151096pY4OHVZbM3.png

更進一步,我們點開ironman資料夾底下的migrations資料夾,可以看到真的生成了0001_initial.py的檔案。

此檔案的目的是在於依照models.py以及django_migrations、content_type等table的變化,來生成指令,並且在下一步,migrate,也就是實際上進行遷移時,直接轉換sql語法來幫助我們快速建立、更改或刪除資料庫。

值得注意的是,這裡的腳本是我們可以更改的。我們在之後的文章會再討論到這個部分。
在使用makemigrations的時候,有時生成的檔案與我們想做的修改並不相同,可以修改migrations檔案的方式來更改其執行的動作。

回到專案可以看到,除了我們撰寫的欄位外,系統自動生成了id的欄位,並把它設定為primary key。
所以在進行migrate之前,最好都可以確認一下,到底migrations的檔案裡都寫了甚麼,是否符合我們想要達到的效果。

migrate

接下來,我們來正式的進行遷移! 建立資料庫的表以及欄位!

python manage.py migrate

https://ithelp.ithome.com.tw/upload/images/20220920/20151096jYs2Viw2tH.png

看到了這麼多綠色的ok,就代表第一次的migrate成功了。
往後每次的migrations,只會看到一個綠色ok。第一次migration,會出現這麼多ok,是由於django自動生成了的其他預設的table,不用擔心。

django預設使用的資料庫為sqlite。如果你有安裝sqlite的extension的話,可以看到已經有以下這些欄位建立成功了!恭喜恭賀!

那今天的文章就先到此結束!
我是Sean! 你各位海上的人,我們明天見!

https://ithelp.ithome.com.tw/upload/images/20220920/20151096MerQLTNxXj.jpg


上一篇
[Day 04] 參見Django的三大將之一: Model
下一篇
[Day 06] 有關係就是有關係,Django的關聯資料庫篇
系列文
傳承D的意志~ 邁向Django的偉大航道30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言